package com.dp.client.views.clientes;

import java.util.Date;
import java.util.List;

import com.dp.client.dto.AlmacenDTO;
import com.dp.client.dto.ClienteDTO;
import com.dp.client.dto.PaqueteDTO;
import com.dp.client.servicios.almacenes.IServiciosAlmacen;
import com.dp.client.servicios.almacenes.IServiciosAlmacenAsync;
import com.dp.client.servicios.paquete.IServiciosPaquete;
import com.dp.client.servicios.paquete.IServiciosPaqueteAsync;
import com.dp.client.util.Alerts;
import com.dp.shared.FieldVerifier;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.NumberLabel;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;

public class PaqueteClienteBusqueda extends Composite {
	private TextBox txtCodigo;
	private CaptionPanel cptnpnlPaquetesPorCliente;
	private Label lblCodigo;
	private String msgError[]={"Codigo debe ser numero","La fecha minima debe ser menor a la maxima"};
	public ClienteDTO cliente;
	private TablaPaqueteCliente tablaPaqueteCliente;
	//private List <AlmacenDTO> almacenes;
	private DateBox dbxFechaMax;
	private DateBox dbxFechaMin;
	/*
	public void cargarAlmacenes() {
		IServiciosAlmacenAsync serviciosAlmacen = GWT.create(IServiciosAlmacen.class);
		serviciosAlmacen.listAlmacenes(new AsyncCallback< List<AlmacenDTO>>(){
			@Override
			public void onSuccess(List <AlmacenDTO> result){
				almacenes=result;
			}
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
	}
	*/
	public PaqueteClienteBusqueda(ClienteDTO cliente) {
		this.cliente=cliente;
		
		FlexTable flexTable = new FlexTable();
		initWidget(flexTable);
		flexTable.setSize("auto", "auto");
		
		cptnpnlPaquetesPorCliente = new CaptionPanel("Paquetes por cliente");
		flexTable.setWidget(0, 0, cptnpnlPaquetesPorCliente);
		cptnpnlPaquetesPorCliente.setWidth("442px");
		
		FlexTable flexTable_1 = new FlexTable();
		cptnpnlPaquetesPorCliente.setContentWidget(flexTable_1);
		flexTable_1.setSize("434px", "3cm");
		
		lblCodigo = new Label("Codigo");
		flexTable_1.setWidget(0, 0, lblCodigo);
		
		txtCodigo = new TextBox();
		flexTable_1.setWidget(0, 1, txtCodigo);
		
		Label lblNewLabel = new Label("Fecha Minima :");
		flexTable_1.setWidget(1, 0, lblNewLabel);
		lblNewLabel.setHeight("100%");
		
		dbxFechaMin = new DateBox();
		flexTable_1.setWidget(1, 1, dbxFechaMin);
		
		Label lblFechaMaxima = new Label("Fecha Maxima :");
		flexTable_1.setWidget(2, 0, lblFechaMaxima);
		
		dbxFechaMax = new DateBox();
		flexTable_1.setWidget(2, 1, dbxFechaMax);
		
		Button btnBuscar = new Button("Buscar");
		btnBuscar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				int indice=validQuery();
				if( indice==-1 ){
					do_query();
				} else {
					Alerts.crearAlerta(msgError[indice]);
				} 
			}
		});
		flexTable_1.setWidget(3, 0, btnBuscar);
		
		tablaPaqueteCliente = new TablaPaqueteCliente(this);
		flexTable.setWidget(1, 0, tablaPaqueteCliente);
		//cargarAlmacenes();
		//do_query();
		
	}

	protected void do_query() {
		if (validQuery()!=-1) return;
		
		//int codigo=txtCodigo.getText().compareTo("")==0 ? -1:Integer.parseInt(txtCodigo.getText());
		String codigo=txtCodigo.getText();
		int idCliente = cliente.getId();
		
		
		Date fechaMin=dbxFechaMin.getValue();
		Date fechaMax=dbxFechaMax.getValue();
		IServiciosPaqueteAsync serviciosPaquete = GWT.create(IServiciosPaquete.class);
		serviciosPaquete.listPaquetesCliente(idCliente, fechaMax, fechaMin, codigo,new AsyncCallback< List < PaqueteDTO > >(){
			@Override
			public void onSuccess(List <PaqueteDTO> result){
				tablaPaqueteCliente.setData(result);
			}
			@Override
			public void onFailure(Throwable caught) {
				
				Alerts.dialogErrorConexion();
			}
		});
	}

	protected int validQuery() {
		if ( !FieldVerifier.isEmpty(txtCodigo.getValue()) && !FieldVerifier.isInteger(txtCodigo.getValue())) return 0;
		return -1;
	}
	
	public void refrescar(){
		//cargarAlmacenes();
		do_query();
	}
	/*
	public AlmacenDTO getAlmacen(int idAlmacen){
		AlmacenDTO almacen=null;
		for (AlmacenDTO a:almacenes){
			if (a.getId()==idAlmacen){
				almacen=a;
			}
		}
		return almacen;
	}*/

}
